<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>4. Variablen und Datentypen &mdash; PowerShell fuer Systemintegratoren</title>
    
    <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    './',
        VERSION:     '1.0',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <script type="text/javascript" src="_static/translations.js"></script>
    <link rel="top" title="PowerShell fuer Systemintegratoren" href="index.html" />
    <link rel="next" title="5. Operatoren" href="powershell_operator.html" />
    <link rel="prev" title="3. PowerShell im Interaktiv-Modus" href="powershell_interactive.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="Allgemeiner Index"
             accesskey="I">Index</a></li>
        <li class="right" >
          <a href="powershell_operator.html" title="5. Operatoren"
             accesskey="N">weiter</a> |</li>
        <li class="right" >
          <a href="powershell_interactive.html" title="3. PowerShell im Interaktiv-Modus"
             accesskey="P">zurück</a> |</li>
        <li><a href="index.html">PS4SYS</a> &raquo;</li> 
      </ul>
    </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="index.html">
              <img class="logo" src="_static/PowerShell_icon_small.png" alt="Logo"/>
            </a></p>
  <h3><a href="index.html">Inhalt</a></h3>
  <ul>
<li><a class="reference internal" href="#">4. Variablen und Datentypen</a><ul>
<li><a class="reference internal" href="#zuweisungsoperator">4.1. Zuweisungsoperator</a></li>
<li><a class="reference internal" href="#daten-zwischen-variablen-austauschen">4.2. Daten zwischen Variablen austauschen</a></li>
<li><a class="reference internal" href="#variablen-finden">4.3. Variablen finden</a></li>
<li><a class="reference internal" href="#konstanten">4.4. Konstanten</a></li>
<li><a class="reference internal" href="#automatische-powershell-variablen">4.5. &#8220;Automatische&#8221; Powershell-Variablen</a></li>
<li><a class="reference internal" href="#umgebungsvariablen">4.6. Umgebungsvariablen</a></li>
<li><a class="reference internal" href="#gultigkeit-von-variablen">4.7. Gültigkeit von Variablen</a></li>
<li><a class="reference internal" href="#typisiert-vs-untypisiert">4.8. Typisiert vs. untypisiert</a></li>
<li><a class="reference internal" href="#typ-erzwingen">4.9. Typ erzwingen</a></li>
<li><a class="reference internal" href="#aufruf-von-befehlen-uber-eine-variable">4.10. Aufruf von Befehlen über eine Variable</a></li>
<li><a class="reference internal" href="#zusammenfassung">4.11. Zusammenfassung</a></li>
</ul>
</li>
</ul>

  <h4>Vorheriges Thema</h4>
  <p class="topless"><a href="powershell_interactive.html"
                        title="vorheriges Kapitel">3. PowerShell im Interaktiv-Modus</a></p>
  <h4>Nächstes Thema</h4>
  <p class="topless"><a href="powershell_operator.html"
                        title="nächstes Kapitel">5. Operatoren</a></p>
  <h3>Diese Seite</h3>
  <ul class="this-page-menu">
    <li><a href="_sources/powershell_variable_datentyp.txt"
           rel="nofollow">Quelltext anzeigen</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Schnellsuche</h3>
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Los" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Geben Sie Suchbegriffe oder einen Modul-, Klassen- oder Funktionsnamen ein.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="variablen-und-datentypen">
<h1>4. Variablen und Datentypen<a class="headerlink" href="#variablen-und-datentypen" title="Permalink zu dieser Überschrift">¶</a></h1>
<div class="topic">
<p class="topic-title first">Überblick</p>
<ul class="simple">
<li>Notwendigkeit von Variablen</li>
<li>Notwendigkeit von Datentypen</li>
<li>Beispielhafte Datentypen (int, string, double)</li>
<li>Ergebnis von Datentypen und darauf wirkende Operatoren</li>
<li>Casten (Umwandlen des Datentyps) einer Variable</li>
<li>Konstante</li>
<li>Automatische Powershell-Variablen</li>
<li>Umgebungsvariablen</li>
<li>Gültigkeit von Variablen</li>
</ul>
</div>
<p>Variablen speichern Informationen, um sie für andere Dinge zu benutzen. Sie sind somit ein Platzhalter/Stellvertreter für den gespeicherten Wert. Über den Namen der Variablen kann auf den Wert zugegriffen werden.</p>
<p>Variablen werden in der Powershell mit einem $-Symbol eingeleitet. Anschließend kann eine fast beliebige Zeichenfolge benutzt werden. Die Namen sind nicht case-sensitive, d.h. Groß- und Kleinschreibung wird nicht unterschieden.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="nv">$netto</span> <span class="o">=</span> 120
<span class="nv">$MWStSatz</span> <span class="o">=</span> 0.19

<span class="nv">$USt</span> <span class="o">=</span> <span class="nv">$netto</span> * <span class="nv">$MWStSatz</span>

<span class="nv">$USt</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nv">$netto</span> + <span class="nv">$USt</span>

<span class="nv">$text</span> <span class="o">=</span> <span class="s2">&quot;Nettowert $netto macht brutto $result&quot;</span>
<span class="nv">$text</span>

<span class="nv">$text</span> <span class="o">=</span> <span class="s2">&quot;Nettowert $netto macht brutto $netto + $USt&quot;</span>
<span class="nv">$text</span>
</pre></div>
</div>
<img alt="_images/variable_1.png" src="_images/variable_1.png" />
<img alt="_images/variable_2.png" src="_images/variable_2.png" />
<img alt="_images/variable_3.png" src="_images/variable_3.png" />
<div class="admonition note">
<p class="first admonition-title">Bemerkung</p>
<img alt="_images/note.png" src="_images/note.png" />
<p>Nicht immer erhält man das, was man erwartet !!</p>
<p>Durch den + - Operator innerhalb des Strings werden die beiden Variablen nicht addiert, sondern hintereinander angefügt.</p>
<p class="last">Die Klammer um die beiden Variablen sorgt dafür, dass erst die Berechnung innerhalb der Klammer ausgeführt wird, bevor die Übergabe an die $text-Variable erfolgt</p>
</div>
<div class="admonition- admonition">
<p class="first admonition-title">.</p>
<img alt="_images/note.png" class="last" src="_images/note.png" />
</div>
<div class="section" id="zuweisungsoperator">
<h2>4.1. Zuweisungsoperator<a class="headerlink" href="#zuweisungsoperator" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Mit Hilfe des Gleichheitszeichen <strong>=</strong> wird einer Variable ein Wert zugewiesen. Will man den Wert einer Variable erfahren, muss man nach Eingabe des Variablenmanes lediglich &lt;RETURN&gt; drücken.  Dabei wird man feststellen, dass eine VAriable durchaus auch mehr <em>Inhalt</em> aufweisen kann.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="nv">$listing</span> <span class="o">=</span> Get-ChildItem c:<span class="se">\</span>
<span class="nv">$listing</span>
Directory: Microsoft.PowerShell.Core<span class="se">\F</span>ileSystem::C:<span class="se">\</span>
Mode            LastWriteTime           Length  Name
----            -------------           ------  ----
d----           06.26.2007                      15:36   2420
d----           05.04.2007                      21:06   ATI
<span class="o">(</span>..<span class="o">)</span>
</pre></div>
</div>
</div>
<div class="section" id="daten-zwischen-variablen-austauschen">
<h2>4.2. Daten zwischen Variablen austauschen<a class="headerlink" href="#daten-zwischen-variablen-austauschen" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Eine Variable kann auch den Wert einer anderen Variablen erhalten</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="nv">$a</span> <span class="o">=</span> <span class="s2">&quot;Kurt&quot;</span>
<span class="nv">$b</span> <span class="o">=</span> <span class="s2">&quot;Sabine&quot;</span>

<span class="nv">$a</span> <span class="o">=</span> <span class="nv">$b</span>

<span class="nv">$a</span> <span class="nv">$b</span>  <span class="o">=</span> <span class="nv">$b</span> <span class="nv">$a</span>
</pre></div>
</div>
</div>
<div class="section" id="variablen-finden">
<h2>4.3. Variablen finden<a class="headerlink" href="#variablen-finden" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Alle während einer <strong>Powershell</strong>-Session erzeugten Variablen bleiben erhalten, obwohl man sie durch das Scrollen des Bildschirms nicht mehr erkennen kann. Um sich einen Überblick über die derzeit benutzbaren Varaibeln zu verschaffen, kann man sich ein Listing des &#8220;<em>Variablen-Verzeichnissses</em>&#8221; geben lasssen.</p>
<div class="highlight-sh"><div class="highlight"><pre>Dir variable:
</pre></div>
</div>
<p>Ist man am Wert einer Variable interessiert kann man folgendes eingeben:</p>
<div class="highlight-sh"><div class="highlight"><pre>Dir variable:variablenname*
</pre></div>
</div>
<img alt="_images/dir_variable.png" src="_images/dir_variable.png" />
<p>Um zu überprüfen, ob eine Variable existiert, kann man mit Hilfe des Cmd-Lets <em>test-Path</em> prüfen, ob sie vorhanden ist.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c"># Verify whether the variable $value2 exists:</span>
Test-Path variable:<span class="se">\v</span>alue2
True
<span class="c"># verify whether the variable $server exists:</span>
Test-Path variable:<span class="se">\s</span>erver
False
</pre></div>
</div>
<p>Das Löschen einer Variablen läuft wie in normalen Verzeichnissen auch mit Hilfe des Befehls <em>del</em></p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c"># create a test variable:</span>
<span class="nv">$test</span> <span class="o">=</span> 1
<span class="c"># verify that the variable exists:</span>
Dir variable:<span class="se">\t</span>e*
<span class="c"># delete variable:</span>
del variable:<span class="se">\t</span>est
<span class="c"># variable is removed from the listing:</span>
Dir variable:<span class="se">\t</span>e*
</pre></div>
</div>
</div>
<div class="section" id="konstanten">
<h2>4.4. Konstanten<a class="headerlink" href="#konstanten" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Normalerweise können Variablen immer wieder mit neuen Werten überschrieben werden. Die sist aber nicht immer gewünscht, so. z.B. bei dem Wert von Pi. Variable, deren Wert sich nicht ändern soll, werden <strong>Konstante</strong> genannt. Sie sind auch in Powershell zu definieren, allerdings etwas umständlich.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c"># Create new variable with description and write-protection:</span>
New-Variable <span class="nb">test</span> -value 100 -description <span class="s2">&quot;test variable with write-protection&quot;</span> -option ReadOnly
<span class="nv">$test</span>
100
<span class="c"># Variable contents cannot be modified:</span>
<span class="nv">$test</span> <span class="o">=</span> 200
The variable <span class="s2">&quot;test&quot;</span> cannot be overwritten since it is a constant or <span class="nb">read</span>-only.
At line:1 char:6
+ <span class="nv">$test</span> <span class="o">&lt;&lt;&lt;</span>&lt; <span class="o">=</span> 200
</pre></div>
</div>
<p>Wurden Variablen auf diese Weise erzeugt, können Sie zumindest noch gelöscht werden. Um auch dies zu verhindern, kann man das New-Variable-Cmdlet mit der Option <em>constant</em> versehen.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="c">#New-Variable cannot write over existing variables:</span>
New-Variable <span class="nb">test</span> -value 100 -description <span class="s2">&quot;test variable with copy protection&quot;</span> -option Constant
New-Variable : A variable named <span class="s2">&quot;test&quot;</span> already exists.
At line:1 Char:13
+ New-Variable <span class="o">&lt;&lt;&lt;</span>&lt; <span class="nb">test</span> -value 100 -description
<span class="s2">&quot;test variable with copy protection&quot;</span> -option Constant
<span class="c"># If existing variable is deleted, New-Variable can create</span>
<span class="c"># a new one with the &quot;Constant&quot; option:</span>
del variable:<span class="se">\t</span>est -force
New-Variable <span class="nb">test</span> -value 100 -description <span class="s2">&quot;test variable with copy protection&quot;</span> -option Constant
<span class="c"># variables with the &quot;Constant&quot; option may neither be</span>
<span class="c"># modified nor deleted:</span>
del variable:<span class="se">\t</span>est -force
Remove-Item : variable <span class="s2">&quot;test&quot;</span> may not be removed since it is a constant or write-protected. If the variable is write-protected, carry out the process with the Force parameter.
At line:1 Char:4
+ del <span class="o">&lt;&lt;&lt;</span>&lt; variable:<span class="se">\t</span>est -force
</pre></div>
</div>
</div>
<div class="section" id="automatische-powershell-variablen">
<h2>4.5. &#8220;Automatische&#8221; Powershell-Variablen<a class="headerlink" href="#automatische-powershell-variablen" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Beim Erzeugen einer <strong>Powershell</strong>-Session sind bereits einige Variablen vorbelegt. Eine Übersicht finden sie hier
<a class="reference internal" href="powershell_anhang_1.html#powershell-variablen"><em>Powershell-Variablen</em></a></p>
<p>Weitere Variablen finden Sie mit Hilfe des bereits oben erwähnten Dir-Befehls</p>
<div class="highlight-sh"><div class="highlight"><pre>dir variable:
</pre></div>
</div>
</div>
<div class="section" id="umgebungsvariablen">
<h2>4.6. Umgebungsvariablen<a class="headerlink" href="#umgebungsvariablen" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Häufig will man auch auf die Umgebungsvariablen des Betriebssystems zugreifen wollen. <strong>Powershell</strong> kennt dazu das <em>Verzeichnis env</em>, über welches man den Zugriff auf diese Werte bekommt.</p>
<div class="highlight-sh"><div class="highlight"><pre>dir env:

<span class="nb">cd</span> <span class="nv">$env</span>:homepath
</pre></div>
</div>
<img alt="_images/variable_env.png" src="_images/variable_env.png" />
<p>Umgebungsvariablen können wie <em>normale</em> Variablen angepasst und hinzugefügt werden. Diese bleiben allerdings nur in der jeweiligen Powershell-Sitzung erhalten.</p>
<p>Um sie permanent zu ändern, muss man das .NET-Framework zu Hilfe nehmen.</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="nv">$oldValue</span> <span class="o">=</span> <span class="o">[</span>environment<span class="o">]</span>::GetEnvironmentvariable<span class="o">(</span><span class="s2">&quot;Path&quot;</span>, <span class="s2">&quot;User&quot;</span><span class="o">)</span>
<span class="nv">$newValue</span> <span class="o">=</span> <span class="s2">&quot;;c:\myTools&quot;</span>
<span class="o">[</span>environment<span class="o">]</span>::SetEnvironmentvariable<span class="o">(</span><span class="s2">&quot;Path&quot;</span>, <span class="nv">$newValue</span>, <span class="s2">&quot;User&quot;</span><span class="o">)</span>
</pre></div>
</div>
</div>
<div class="section" id="gultigkeit-von-variablen">
<h2>4.7. Gültigkeit von Variablen<a class="headerlink" href="#gultigkeit-von-variablen" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Unter Gültigkeit wird verstanden, wann eine Variable für <strong>Powershell</strong> nutzbar ist.</p>
<p>Erläutern Sie die Ausgabe in folgender Abbildung:</p>
<img alt="_images/scope_1.png" src="_images/scope_1.png" />
<p><strong>Powershell</strong> erzeugt für jedes Skript eine eigene Variablenumgebung, die zunächst nichts miteinander zu tun hat. Der Aufruf des Skripts innerhalb der gleichen Umgebung mit Hilfe von <em>.test.ps1</em> führte zum Erzeugen einer neuen Umgebung.</p>
<p>Erst der richtige Aufruf innerhalb der Konsole führt dazu, dass das Skript gleichsam in der eigenen Variablenumgebung läuft. Finden Sie den kleinen Unterschied zum ersten Bild ??</p>
<img alt="_images/scope_2.png" src="_images/scope_2.png" />
<p>Erst ween das Skript &#8220;dot-sourced&#8221; aufgerufen wird, befindet es sich in der gleichen Variablenumgebung wie die Konsole und benutzt nun die gleichen Variablen.</p>
<img alt="_images/scope_3.png" src="_images/scope_3.png" />
<p>Die Gültigkeit von Variablen war mit den bisherigen Verfahren entweder als &#8220;ganz oder gar nicht&#8221; zu bezeichnen.</p>
<p><strong>Powershell</strong> kennt noch eine andere Art, um die Gültigkeit von Variablen zu definieren., nämlich mit Hilfe der Modifier <strong>private, local, script, global</strong>.</p>
<img alt="_images/scope_4.png" src="_images/scope_4.png" />
<div class="admonition note">
<p class="first admonition-title">Bemerkung</p>
<p>Tafelbild</p>
<p>Tafelbild zu Scope</p>
<img alt="_images/scope_5.png" src="_images/scope_5.png" />
<img alt="_images/scope_6.png" class="last" src="_images/scope_6.png" />
</div>
</div>
<div class="section" id="typisiert-vs-untypisiert">
<h2>4.8. Typisiert vs. untypisiert<a class="headerlink" href="#typisiert-vs-untypisiert" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>Die Werte, die einer Variable zugewiesen werden können, stellen häufig einen numerischen Wert oder einen Zeichenwert dar. Man spricht deshalb vom <strong>Typ</strong> einer Variable, bzw. dem sog. <strong>Datentyp</strong>. Dies kann z.B. eine Ganzzahl (int) oder eine Gleitkommazahl (double) sein.</p>
<p>Wichtig an dieser Tatsache ist, dass die Festlegung einer Variable auf einen bestimmten Typ Auswirkungen auf die weitere Benutzung hat. Insbesondere bei der Verbindung mit <strong>Operatoren</strong> erhält man manchmal überraschende Ausgaben, wie die obigen bilder gezeigt haben.</p>
<p>Manche Programmiersprachen legen Wert darauf, dass die Variablen bei der Deklaration einen Datentyp <strong>explizit</strong> zugewiesen bekommen müssen (sog. typisierte Programmiersprachen, z.B. c#). Andere Programmiersprachen machen diese Zuweisung zu einem Datentyp <strong>implizit</strong>, d.h. ohne Zutun des Programmierers wird einer Variablen ein Datentyp zugewiesen.</p>
<p><strong>Powershell</strong> lässt zunächst eine untypisierte Schreibweise zu; intern arbeitet es aber mit der typisierten Form der Variable.</p>
<p>Um den Datentyp einer Varibalen zu erhalten, kann man hinter die Variable den Befehl GetType().Name stellen. Beispiel:</p>
<div class="highlight-sh"><div class="highlight"><pre><span class="o">(</span>12<span class="o">)</span>.GetType<span class="o">()</span>.Name
Int32
<span class="o">(</span>1000000000000<span class="o">)</span>.GetType<span class="o">()</span>.Name
Int64
<span class="o">(</span>12.5<span class="o">)</span>.GetType<span class="o">()</span>.Name
Double
<span class="o">(</span>12d<span class="o">)</span>.GetType<span class="o">()</span>.Name
Decimal
<span class="o">(</span><span class="s2">&quot;H&quot;</span><span class="o">)</span>.GetType<span class="o">()</span>.Name
String
<span class="o">(</span>Get-Date<span class="o">)</span>.GetType<span class="o">()</span>.Name
DateTime
</pre></div>
</div>
<p>Powershell sucht den am besten passenden Datentyp automatisch heraus, was als sog. <em>weakly typed</em> bezeichnet wird.  Dies kann auch negative Konsequenzen haben, weshalb man häufig explizit einen Datentyp angibt.</p>
<p>Viele Datentypen haben auch ihre eigenen Hilfsfunktionen, die nur bei der korrekten Zuweisung des Datentyps vorhanden sind.</p>
<p>Beispiel:</p>
<div class="highlight-sh"><div class="highlight"><pre>   <span class="nv">$date</span> <span class="o">=</span> <span class="s2">&quot;November 12, 2010&quot;</span>
   <span class="nv">$date</span>

   November 12, 2004



   <span class="c"># als datetime bietet die Variable mehr Möglichkeiten</span>

   <span class="o">[</span>datetime<span class="o">]</span><span class="nv">$date</span> <span class="o">=</span> <span class="s2">&quot;November 12, 2004&quot;</span>
   <span class="nv">$date</span>
   Friday, November 12, 2004 00:00:00

   <span class="nv">$date</span>.AddDays<span class="o">(</span>60<span class="o">)</span>
   Tuesday, January 11, 2005 00:00:00



   <span class="c">#auch xml-Dateien sind plötzlich sehr einfach</span>
   <span class="c"># PowerShell stores a text in XML format as a string:</span>
   <span class="nv">$t</span> <span class="o">=</span> <span class="s2">&quot;&lt;servers&gt;&lt;server name=&#39;PC1&#39; ip=&#39;10.10.10.10&#39;/&gt;&quot;</span> +
<span class="s2">&quot;&lt;server name=&#39;PC2&#39; ip=&#39;10.10.10.12&#39;/&gt;&lt;/servers&gt;&quot;</span>
<span class="nv">$t</span>
&lt;servers&gt;&lt;server <span class="nv">name</span><span class="o">=</span><span class="s1">&#39;PC1&#39;</span> <span class="nv">ip</span><span class="o">=</span><span class="s1">&#39;10.10.10.10&#39;</span>/&gt;
&lt;server <span class="nv">name</span><span class="o">=</span><span class="s1">&#39;PC2&#39;</span> <span class="nv">ip</span><span class="o">=</span><span class="s1">&#39;10.10.10.12&#39;</span>/&gt;&lt;/servers&gt;
<span class="c"># If you assign the text to a data type[xml], you&#39;ll</span>
<span class="c"># suddenly be able to access the XML structure:</span>
<span class="o">[</span>xml<span class="o">]</span><span class="nv">$list</span> <span class="o">=</span> <span class="nv">$t</span>
<span class="nv">$list</span>.servers
server
------
<span class="o">{</span>PC1, PC2<span class="o">}</span>

<span class="nv">$list</span>.servers.server
name                                          ip
----                                          --
PC1                                           10.10.10.10
PC2                                           10.10.10.12
<span class="c"># Even changes to the XML contents are possible:</span>
<span class="nv">$list</span>.servers.server<span class="o">[</span>0<span class="o">]</span>.ip <span class="o">=</span> <span class="s2">&quot;10.10.10.11&quot;</span>
<span class="nv">$list</span>.servers
name                                          ip
----                                          --
PC1                                           10.10.10.11
PC2                                           10.10.10.12
<span class="c"># The result could be output again as text, including the</span>
<span class="c"># modification:</span>
<span class="nv">$list</span>.get_InnerXML<span class="o">()</span>
&lt;servers&gt;&lt;server <span class="nv">name</span><span class="o">=</span><span class="s2">&quot;PC1&quot;</span> <span class="nv">ip</span><span class="o">=</span><span class="s2">&quot;10.10.10.11&quot;</span> /&gt;
&lt;server <span class="nv">name</span><span class="o">=</span><span class="s2">&quot;PC2&quot;</span> <span class="nv">ip</span><span class="o">=</span><span class="s2">&quot;10.10.10.12&quot;</span> /&gt;&lt;/servers&gt;
</pre></div>
</div>
</div>
<div class="section" id="typ-erzwingen">
<h2>4.9. Typ erzwingen<a class="headerlink" href="#typ-erzwingen" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>PowerShell kennt im Gegensatz zu C# keine Datentypen und ist damit untypisiert; man kann dieses Verhalten aber erzwingen, indem man den Datentyp in eckigen Klammern voranstellt.</p>
<div class="highlight-sh"><div class="highlight"><pre>PS&gt; <span class="nv">$a</span> <span class="o">=</span> <span class="s2">&quot;hello&quot;</span> <span class="c"># Implizites Zuweisen des Datentyps string zur Variable</span>

    <span class="o">[</span>int<span class="o">]</span><span class="nv">$b</span> <span class="o">=</span> 5  <span class="c"># Explizites Zuweisen des Datentyps int</span>


    <span class="nv">$a</span>.GetType<span class="o">()</span>;

    IsPublic IsSerial Name                BaseType
    -------- -------- ----                --------
    True     True     String              System.Object


    <span class="nv">$b</span>.getType<span class="o">()</span>

    IsPublic IsSerial Name                BaseType
    -------- -------- ----                --------
    True     True     Int32               System.ValueType
</pre></div>
</div>
<p>Powershell kennt und benutzt die Datentypen des .NET-Frameworks. Eine Übersicht über gängige Datentypen und deren Eigenschaften finden Sie unter  <a class="reference external" href="http://msdn.microsoft.com/de-de/library/1dhd7f2x.aspx">http://msdn.microsoft.com/de-de/library/1dhd7f2x.aspx</a></p>
</div>
<div class="section" id="aufruf-von-befehlen-uber-eine-variable">
<h2>4.10. Aufruf von Befehlen über eine Variable<a class="headerlink" href="#aufruf-von-befehlen-uber-eine-variable" title="Permalink zu dieser Überschrift">¶</a></h2>
<p>You can use the PowerShell call operator &#8220;&amp;&#8221;. Here is a simple example:</p>
<p>$a = &#8220;Get-Process&#8221;
&amp; $a</p>
<p>There is a caveat with using this since the call operator can only operate against a single command. If you were to modify the above like this:</p>
<p>$a = &#8220;Get-Process w*&#8221;
&amp; $a</p>
<p>you will get an error. To get around this use Invoke-Expression as follows:</p>
<p>$a = &#8220;Get-Process w*&#8221;
Invoke-Expression $a</p>
<p>See Get-Help Invoke-Expression -examples to get more examples on the usage of Invoke-Expression.</p>
</div>
<div class="section" id="zusammenfassung">
<h2>4.11. Zusammenfassung<a class="headerlink" href="#zusammenfassung" title="Permalink zu dieser Überschrift">¶</a></h2>
<ul class="simple">
<li>Variablen speihern jede Art von Information</li>
<li>Sie beginnen immer mit dem &#8220;$&#8221;-Zeichen. Anschließend können Sie aus alphanumerischen und Sonderzeichen (z.B. Unserscore) bestehen</li>
<li>Groß- und Kleinschreibung spielt keine Rolle</li>
<li>&#8220;Konstante&#8221; Variablen ändern ihren Wert nicht mehr</li>
<li><strong>Powershell</strong> hat schon selbst gewisse Variablen definiert (automatische Variablen)</li>
<li><strong>Powershell</strong> sorgt dafür, dass der Typ einer Variable zum Typ des zu speichernden Wertes passt (weakly typing)</li>
<li><strong>Powershell</strong> unterstützt Strong-Typing durch Voranstellen des Datentyps in eckigen Klammern []</li>
<li><strong>Powershell</strong> erstellt die Variablen jeweils innerhalb eines gewissen Gültigkeitsbereichs (local, private, script, global)</li>
<li>An Umgebungsvariablen kann durch $env: zugegriffen werden</li>
</ul>
<p><a class="reference internal" href="powershell_anhang_1.html#powershell-datentypen"><em>Powershell-Datentypen</em></a></p>
<span class="target" id="index-1"></span></div>
</div>


          </div>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="Allgemeiner Index"
             >Index</a></li>
        <li class="right" >
          <a href="powershell_operator.html" title="5. Operatoren"
             >weiter</a> |</li>
        <li class="right" >
          <a href="powershell_interactive.html" title="3. PowerShell im Interaktiv-Modus"
             >zurück</a> |</li>
        <li><a href="index.html">PS4SYS</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2010, STE.
      Mit <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1 erstellt.
    </div>
  </body>
</html>